//
//  mappingable.swift
//  ReferenceFunctionDemo
//
//  Created by MACBOOK on 2016/12/16.
//  Copyright © 2016年 刘袭锐. All rights reserved.
//

/*********** 反射机制 ************/

import UIKit

protocol mappingable {
    
}


extension mappingable {
    
    
    /// 根据字符串创建对应控制器
    ///
    /// - Parameter className: Storyboard或者Xib名字,与对应类名字一样
    /// - Returns: 对应控制器
    func mappingableGetViewController(_ className : String) -> UIViewController {
        
        // 获取命名空间(计算性属性)
        // 根据Bundle中的plistInfo文件拿到命名空间(也就是项目名称)
        // CFBundleName key值所对应的就是  infoDictionary?是可选的字典
        let nameSpace = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
        
        // 拼接字符串
        //let vcName = nameSpace + "." + "ViewController"
        let vcName = nameSpace + "." + className
        // 根据字符串拿到 视图控制器的类型
        guard let vcClass = NSClassFromString(vcName) as? UIViewController.Type
  else {
            fatalError("请检查className与Storyboard或者Xib是否一致")
        }
        // 创建控制器
        let vc = vcClass.init()
        return vc
    }
}
